package com.dys.servlet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: 疾风
 * @ClassName: Servlet01
 * @Description: 请求与转发(源组件)
 * @CreateDate: 2024/09/20
 * @Version: v1.0.0
 */
@WebServlet(urlPatterns = "/servlet01.do")
public class Servlet01 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行Servlet01的service方法......");
        // http://localhost:8080/servlet_app06_Web_exploded/servlet01.do?money=200
        String money = req.getParameter("money");
        System.out.println("传递的money: " + money);

        // Servlet01做出任何响应都是无效的：响应完全交给目标组件进行处理
        // resp.setCharacterEncoding("UTF-8");
        // resp.setContentType("text/html");
        // resp.getWriter().println("Servlet01在转发之前响应的内容");

        /*
         * 1请求转发是一种服务器的行为,是对浏览器屏蔽
         * 2浏览器的地址栏不会发生变化
         * 3请求的参数是可以从源组件传递到目标组件的
         * 4请求对象和响应对象没有重新创建,而是传递给了目标组件
         * 5请求转发可以帮助我们完成页面的跳转
         * 6请求转发可以转发至WEB-INF里
         * 7请求转发只能转发给当前项目的内部资源,不能转发至外部资源
         * 8常用forward
         * */
        // 请求转发给另外一个组件(jsp、html、servlet)
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("servlet02.do");
        // RequestDispatcher requestDispatcher = req.getRequestDispatcher("aaa.html");
        // RequestDispatcher requestDispatcher = req.getRequestDispatcher("index.jsp");
        // RequestDispatcher requestDispatcher = req.getRequestDispatcher("WEB-INF/bbb.html");
        // 请求转发只能转发给当前项目的内部资源,不能转发至外部资源
        // RequestDispatcher requestDispatcher = req.getRequestDispatcher("https://www.baidu.com");

        // 在forward转发模式下,请求应该完全交给目标资源去处理,我们在源组件中,不要作出任何的响应处理
        // 在forward方法调用之后,也不要在使用req和resp对象做其他操作了
        // 由转发器做出转发动作
        requestDispatcher.forward(req, resp);
    }
}
